#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/async.h>
#include <chrono>
#include <iostream>

// 异步日志器
int main()
{
    // 设置全局的刷新策略
    spdlog::flush_every(std::chrono::seconds(1));// 每秒刷新
    // 遇到debug以上等级的日志立即刷新
    spdlog::flush_on(spdlog::level::level_enum::debug);

    // 设置全局的日志输出等级
    spdlog::set_level(spdlog::level::level_enum::warn); // 只有高于这个等级才会被输出
    
    //初始化异步日志输出线程配置
    spdlog::init_thread_pool(3072, 1);  //参数1:任务队列的大小 参数2:线程池中线程的数量

    // 创建同步日志器(标准输出/文件)    -- 工厂接口默认创建的就是同步日志器
    auto logger = spdlog::stdout_color_mt<spdlog::async_factory>("async-logger");    //参数: 日志器名字 创建一个输出到屏幕的日志器
    // auto logger = spdlog::basic_logger_mt("file-logger", "sync.log");   //参数: 1.日志器名字  2.文件名 3.false 是否截断以前的内容


    // 设置日志器的刷新策略, 以及设置日志器的输出等级 - 上面已经设置过了
    // logger->flush_on(spdlog::level::level_enum::debug);
    // logger->set_level(spdlog::level::level_enum::debug);


    // 进行简单的日志输出
    logger->set_pattern("[%n][%H:%M:%S][%t][%-8l][%v] ");
    //[default-logger][15:35:52][561225][warning ][你好! 小明] %t: 时间戳 %n: 使用的是哪个日志器, 就是输出上面的参数


    // 进行简单的日志输出
    logger->trace("你好! {}", "小明");
    logger->debug("你好! {}", "小明");
    logger->info("你好! {}", "小明");
    logger->warn("你好! {}", "小明");
    logger->error("你好! {}", "小明");
    logger->critical("你好! {}", "小明");
    std::cout << "日志输出演示完毕! \n";
    return 0;
}
